A cloud computing environment, also called a “cloud environment” or simply a “cloud”, provides shared processing resources on demand over at least one network. Often, but not always, the cloud computing environment is accessed over the Internet. The cloud's users are often called “guests” or “tenants”.
In the absence of hardware failures and other faults, the processing resources provided by the cloud computing environment are generally available on demand from shared pools of configurable computing resources such as networks, servers, storage devices, applications, and software services, and the offered resources can be rapidly provisioned and released with relatively small management effort from the users. A cloud environment's computing and storage solutions provide the cloud's users with varied and flexible capabilities to store and process their data in third-party datacenters. Faults that limit the available computing resources may impact a single server, or a rack of servers, or even in some cases an entire datacenter, for example.
Some cloud providers offer an “Infrastructure-as-a-Service” (IaaS), which includes offering the use of computers, either “bare metal” physical computers or (more often) virtual machines. IaaS services generally spare the cloud's tenants from dealing with details of infrastructure such as the physical location of a server within a datacenter, the data partitioning and replication locations used, and the administrative details of computational resource scaling, by hiding those details from the tenants. IaaS tenants can develop and run their software solutions on the IaaS cloud platform without the cost and complexity of buying and managing the underlying hardware. A hypervisor may run the virtual machines on behalf of the tenants, which can often allow one or more operating systems within respective virtual machines to share a single hardware host. In the absence of large faults (e.g., non-functionality of an entire datacenter), hypervisors within the cloud can generally support many virtual machines and can scale the offered services up and down, according to tenants' varying requirements. To deploy their applications in the cloud, tenants install their own operating system images on top of the cloud's virtual machines, then install their application software on top of the operating systems. In an IaaS model, each tenant is responsible both for updates to the operating systems and for updates to the application software the tenant runs.
Some cloud providers offer a “Platform-as-a-Service” (PaaS), which includes offering a development environment to application developers. PaaS services generally spare the cloud's tenants from dealing with infrastructure details required for installing and updating operating system images, by hiding those details from the tenants. Thus, a PaaS offering may run on top of one or more IaaS offerings. The PaaS provider typically offers toolkits and standards for software development and may offer channels for software distribution and for licensing or subscription payments. A PaaS provider generally provides tenants with a computing platform, typically including an operating system, one or more programming language execution environments, database services, and/or web services. Application developers can develop and run their software solutions on the PaaS cloud platform without the cost and complexity of buying and managing the underlying hardware and software. With some PaaS offerings, the underlying computer and storage resources can scale automatically to match application demand so that the cloud tenant does not have to allocate those resources manually.